#define _CRT_SECURE_NO_WARNINGS 1
//#include <iostream>
//#include <vector>
//#include <deque>
//#include <list>
//#include <algorithm>
//using namespace std;
//int main()
//{
//	const int arraySize = 7;
//	int arr[arraySize] = { 0,1,2,3,4,5,6 };
//	vector<int> v(arr, arr + arraySize);
//	list<int> li(arr, arr + arraySize);
//	deque<int> dq(arr, arr + arraySize);
//	auto it1 = find(v.begin(), v.end(), 4);
//	if (it1 == v.end())
//	{
//		cout << "4 not found." << endl;
//	}
//	else
//	{
//		cout << "4 found." << endl;
//	}
//
//	list<int>::iterator it2 = find(li.begin(), li.end(), 6);
//	if (it2 == li.end())
//	{
//		cout << "6 not found" << endl;
//	}
//	else
//	{
//		cout << "6 found" << endl;
//	}
//
//	auto it3 = find(dq.begin(), dq.end(), 8);
//	if (it3 == dq.end())
//	{
//		cout << "8 not found" << endl;
//	}
//	else
//	{
//		cout << "8 found" << endl;
//
//	}
//
//	return 0;
//}

//#include <stdio.h>
//#include <memory>
//#include <iostream>
//#include <string>
//using namespace std;
//int main()
//{
//	auto_ptr<string> ptr(new string("hello world"));
//	cout << *ptr << endl;
//	cout << ptr->size() << endl;
//	auto_ptr<string> ptr(new string("11"));
//
//
//
//	return 0;
//}

//#include <iostream>
//#include <list>
//#include <memory>
//using namespace std;
//template<class T>
//struct MyIter
//{
//	typedef T value_type;
//	T* ptr;
//	MyIter(T* p = 0)
//		:ptr(p)
//	{
//
//	}
//		
//	T operator*()
//	{
//		return *ptr;
//	}
//
//};
//
//
//template<class I>
// //typename MyIter<class T>::value_type Func(I iter)
////typename MyIter<class T>::value_type Func(I iter)
//typename I::value_type Func(I iter)
// {
//	return *iter;
//
//}
//int main()
//{
//	MyIter<int> it(new int(8));
//	cout << *it << endl;
//	
//
//	return 0;
//}

//#include <iostream>
//#include <type_traits>
//#include <vector>
//using namespace std;
//template<class T>
//T Func()
//{
//	return T(10.1);
//}
//int main()
//{
//	cout<<Func<int>()<<endl;
//	typename iterator_traits<vector<int>>::difference_type;
//
//
//	return 0;
//}

//#include <iostream>
//#include <algorithm>
//using namespace std;
//struct input_iterator_tag
//{
//
//};
//
//struct output_iterator_tag
//{
//
//};
//
//struct forward_iterator_tag :public input_iterator_tag
//{
//
//};
//
//struct bidirectionaliteratora_tag :public forward_iterator_tag
//{
//
//};
//
//struct  randomiterator_tag :public bidirectional_iterator_tag
//{
//
//};
//
//using namespace std;
//template<class InputIterator, class Distance>
//inline void _advance(InputIterator& it, Distance n, input_iterator_tag)
//{
//
//
//}
//int main()
//{
//
//
//
//
//    return 0;
//}


//#include <iostream>
//#include <algorithm>
//#include <vector>
//#include <iterator>
////#include <iterator_traits>
//using namespace std;
//namespace lnb
//{
//
//    struct input_iterator_tag
//    {
//    };
//
//    struct output_iterator_tag
//    {
//    };
//
//    struct forward_iterator_tag : public input_iterator_tag
//    {
//    };
//
//    struct bidirectional_iterator_tag : public forward_iterator_tag
//    {
//    };
//
//    struct random_iterator_tag : public bidirectional_iterator_tag
//    {
//    };
//
//    template <class InputIterator, class Distance>
//    inline void _advance(InputIterator& it, Distance n, input_iterator_tag)
//    {
//        while (n--)
//        {
//            it++;
//        }
//    }
//
//    template<class ForwardIterator, class Distance>
//    inline void _advance(ForwardIterator& it, Distance n, forward_iterator_tag)
//    {
//        _advance(it, n, input_iterator_tag());
//
//    }
//
//
//    template<class BidrectionalIterator, class Distance>
//    inline void _advance(BidrectionalIterator& it, Distance n, bidirectional_iterator_tag)
//    {
//        if (n >= 0)
//        {
//            while (n--)
//            {
//                it++;
//            }
//        }
//        else
//        {
//            while (n++)
//            {
//                it--;
//            }
//        }
//    }
//
//
//    template<class RandomInterator, class Distance>
//    inline void _advance(RandomInterator& it, Distance n, random_iterator_tag)
//    {
//        it += n;
//    }
//
//    template<class InputIterator>
//    struct iterator_traits
//    {
//        using iterator_category = input_iterator_tag;
//    };
//
//    template<>
//    struct iterator_traits<vector<int>::iterator>
//    {
//        using iterator_category = random_iterator_tag;
//    };
//
//    template<class InputIterator, class Distance>
//    inline void advance(InputIterator& it, Distance n)
//    {
//        _advance(it, n, std::iterator_traits<InputIterator>::iterator_category());
//    }
//
//   
//}
//
//
//int main()
//{
//    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//    std::vector<int> v(arr, arr + 10);
//    vector<int>::iterator it = v.begin();
//    lnb::advance(it, 5);
//    while (it != v.end())
//    {
//        cout << *it << endl;
//        it++;
//    }
//    //cout << typeid(std::iterator_traits<vector<int>::iterator>::iterator_category).name() << endl;
//
//    return 0;
//}

//#include <iostream>
//using namespace std;
//namespace lnb{
//
//	struct base
//	{
//
//	};
//
//
//}
//namespace nby
//{
//	struct base
//	{
//
//	};
//	void Function(base b)
//	{
//
//
//
//	}
//
//}
//using namespace lnb;
//int main()
//{
//	base b;
//	nby::Function(b);
//
//
//
//	return 0;
//}